﻿using FirstFloor.ModernUI.Presentation;
using FirstFloor.ModernUI.Windows.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;


namespace plust.Content
{
    public class ProductoViewModel : INotifyPropertyChanged, IDataErrorInfo
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string sku;
        private string stock_critico;
        private string precio_venta;
        private string precio_neto;
        private string stock_real;
        private string descripcion;

        public string Descripcion
        {
            get { return this.descripcion; }
            set
            {
                this.descripcion = value;
                OnPropertyChanged("Descripcion");
            }
        }

        public string Sku
        {
            get { return this.sku; }
            set
            {
                    this.sku = value;
                    OnPropertyChanged("Sku");
            }
        }

        public string StockCritico
        {
            get { return this.stock_critico; }
            set
            {   
                this.stock_critico = value;
                OnPropertyChanged("StockCritico");       
            }
        }

        public string PrecioVenta
        {
            get { return this.precio_venta; }
            set
            {
                this.precio_venta = value;
                OnPropertyChanged("PrecioVenta");            
            }
        }

        public string PrecioNeto
        {
            get { return this.precio_neto; }
            set
            {
                this.precio_neto = value;
                OnPropertyChanged("PrecioNeto");
            }
        }

        public string StockReal
        {
            get { return this.stock_real; }
            set
            {
                this.stock_real = value;
                OnPropertyChanged("StockReal");     
            }
        }

        public string Error
        {
            get { return null; }
        }

        public string this[string columnName]
        {
            get
            {
                if (columnName == "Sku")
                {
                    return string.IsNullOrEmpty(this.sku) ? "Valor Requerido" : null;
                }

                if (columnName == "Descripcion")
                {
                    return string.IsNullOrEmpty(this.descripcion) ? "Valor Requerido" : null;
                }

                if (columnName == "StockCritico")
                {
                    if (!string.IsNullOrEmpty(this.stock_critico))
                    {
                        try
                        {
                            int numVal = 0;
                            numVal = Convert.ToInt32(this.stock_critico);

                            if (numVal <= 0)
                            {
                                return "Debe ser mayor que cero";
                            }
                        }
                        catch (FormatException e)
                        {
                            return "Debe ser Numero";
                        }
                    }
                    return string.IsNullOrEmpty(this.stock_critico) ? "Valor Requerido" : null;
                }

                if (columnName == "PrecioVenta")
                {
                    if (!string.IsNullOrEmpty(this.precio_venta))
                    {
                        try
                        {
                            int numVal = 0;
                            numVal = Convert.ToInt32(this.precio_venta);

                            if (numVal <= 0)
                            {
                                return "Debe ser mayor que cero";
                            }
                        }
                        catch (FormatException e)
                        {
                            return "Debe ser Numero";
                        }
                    }

                    return string.IsNullOrEmpty(this.precio_venta) ? "Valor Requerido" : null;
                }

                if (columnName == "PrecioNeto")
                {
                    if (!string.IsNullOrEmpty(this.precio_neto))
                    {
                        try
                        {
                            int numVal = 0;
                            numVal = Convert.ToInt32(this.precio_neto);

                            if (numVal <= 0)
                            {
                                return "Debe ser mayor que cero";
                            }
                        }
                        catch (FormatException e)
                        {
                            return "Debe ser Numero";
                        }
                    }

                    return string.IsNullOrEmpty(this.precio_neto) ? "Valor Requerido" : null;
                }

                if (columnName == "StockReal")
                {
                    if (!string.IsNullOrEmpty(this.stock_real))
                    {
                        try
                        {
                            int numVal = 0;
                            numVal = Convert.ToInt32(this.stock_real);
                        }
                        catch (FormatException e)
                        {
                            return "Debe ser un numero";
                        }
                    }

                    return string.IsNullOrEmpty(this.stock_real) ? "Valor Requerido" : null;
                }

                    return null;
              }         
        }

        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;

            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }    
}
